<?php
/************************************************
 *  描述: 一个简单的session类，仅仅提供一些初始化的函数
 *  作者: firmit 
 *  创建: 2012-03-28
 *  更新: 2012-04-25 
 *        添加了由系统控制的session选项
 ************************************************/

class MC_Session{

    /**
     * @var session 类型为 系统自管理
     */
    const TYPE_SYS = 1;

	/**
     * @var session 类型为 DB Session
     */
    const TYPE_DB = 2;

    /**
     * 保证对象不被clone
     */
    public function __clone() {}

    /**
     * 构造函数
     */
    public function __construct() {}

    //初始化sessionDB
    public static function _initSessionDB($expireTime = 0){
        $_s = new SessionDb();
        $_s->execute();
        session_cache_limiter('private, must-revalidate');
        session_start();
    }

    //添加验证session方法
    public static function sessionVerify() {
		if(!isset($_SERVER['HTTP_USER_AGENT'])){
			//$_SERVER['HTTP_USER_AGENT'] = sha1(rand(time()));
			$_SERVER['HTTP_USER_AGENT'] = sha1(rand());
		}
        if(!isset($_SESSION['user_agent'])){
            $_SESSION['user_agent'] = MD5($_SERVER['REMOTE_ADDR'].$_SERVER['HTTP_USER_AGENT']);
        }
        /* 如果用户session ID是伪造,则重新分配session ID */
        elseif ($_SESSION['user_agent'] != MD5($_SERVER['REMOTE_ADDR'] . $_SERVER['HTTP_USER_AGENT'])) {
            session_regenerate_id();
        }
    }
    /**
     * 销毁session
     * 三步完美实现,不可漏
     *
     */
    public static function sessionDestroy() {
        session_destroy();
        setcookie(session_name(),'',time()-3600);
        $_SESSION = array();
    }

    //初始化session 的 工厂类
    public static function sessionInit($type = self::TYPE_DB, $expire_time = false){
        if($type == ''){
            $type = self::TYPE_DB;
        }
		if($expire_time === false){
			$expire_time = __get_config('Sess.expire_time');
		}
        switch ($type){
            case self::TYPE_SYS:
				ini_set('session.gc_maxlifetime',$expire_time); 
				session_cache_limiter('private, must-revalidate');
				session_start();
                break;
            case self::TYPE_DB:
                self::_initSessionDB();
                break;
            default:
                throw new MC_Exception(__CLASS__ .": Session start $type not support");
        }
        self::sessionVerify();
    }


}



?>
